package s2elinshu;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

import s2elinshu.model.SungJuk2VO;

public class J19ArrayList {

	public static void main(String[] args) {
		 // ArrayList
	    // 실무에서 빈번하게 사용되는 컬렉션 객체 중 하나
		// 배열과 달리 입력하는 데이터 갯수에 따라 크기가 유동적으로 변함
		// 중복값을 저장할 수 있고, 입력되는 값들은 순서를 가짐
		// 배열선언 및 정의
		ArrayList<String> woman= new ArrayList<>();
		ArrayList<SungJuk2VO> sj= new ArrayList<>();
		
		
		//추가하기 add
		woman.add("태희");
		woman.add("혜교");
		woman.add("지현");
		sj.add(new SungJuk2VO("태희", 98, 80, 70));
		sj.add(new SungJuk2VO("혜교", 80, 95, 85));
		sj.add(new SungJuk2VO("지현", 70, 80, 90));

		
		// 하나씩 조회 get(위치)
		// SungJukVO의 toString()에 의해 출력
		
		System.out.println(woman.get(0));
		System.out.println(woman.get(1));
		System.out.println(woman.get(2));
		System.out.println(sj.get(0));
		System.out.println(sj.get(1));
		System.out.println(sj.get(2));
		
		System.out.println(sj.get(0).getName());
		System.out.println(sj.get(1).getName());
		System.out.println(sj.get(2).getName());		
		
		
		// 몽땅 출력(for-each)
		// ArrayList<a> b= new ArrayList<>();
		// for(a ???:b){}
	    // for(요소유형 요소명:arraylist 객체명 )
		for(String str : woman){
			System.out.println(str);
		}
		for(SungJuk2VO s : sj ){
			System.out.println(s);
		}		
		
		
		// 수정하기 set(위치, 값)
		System.out.println(woman.get(1));
		woman.set(1, "수지");
		System.out.println(woman.get(1));
		
		
		SungJuk2VO newone = new SungJuk2VO("수정", 78, 32, 45);
		
		
		System.out.println(sj.get(2));
		sj.set(2, newone);
		System.out.println(sj.get(2));
		
		
		// 삭제하기 remove(위치)
		woman.remove(1);
		sj.remove(2);
		for(String str : woman){
			System.out.println(str);
		}
		for(SungJuk2VO s : sj ){
			System.out.println(s);
		}		
		
		// 포함여부 확인 contains/indexOf
		String key = "지현";
		if(woman.contains(key)){
			System.out.println("데이터가 존재합니다.");
			System.out.println(woman.indexOf(key));
		}else{System.out.println("데이터가 존재하지 않습니다.");}
		
		
		// 정렬 sort
				// 객체를 대상으로 정렬하려면 
				// Comparator 라는 인터페이스를 구현하고
				// collections.sort(대상, 정렬기준);
				// 으로 호출해서 사용해야 함
		Collections.sort(woman);
		for(String str : woman){
			System.out.println(str);
		};

		
		Collections.sort(sj, new NameSort());
		for(SungJuk2VO s:sj){
			System.out.println();
		}


		// 모두 삭제 clear
		woman.clear();
		sj.clear();
		for(String str : woman){
			System.out.println(str);
		}
		for(SungJuk2VO s : sj){
			System.out.println(s);
		}
		
/*		key = "수정";
		if(sj.get(0).getName().contains(key)){
			System.out.println("찾았어요!");
		}else{System.out.println("못 찾았어요");}*/
		
		key = "수지";
		for(SungJuk2VO s:sj){
		if(s.getName().contains(key)){
			System.out.println("찾았어요!");
			
		}else{System.out.println("못 찾았어요");}
		}
		
		
	}  // public static void main
}  // public class J19HashMap 
class NameSort implements Comparator<SungJuk2VO>{

	@Override
	public int compare(SungJuk2VO sj1, SungJuk2VO sj2) {
		return sj1.getName().compareTo(sj2.getName());
	}

}